package com.passion.fs.util;

import com.passion.fs.vo.DtreeNode;

import java.util.List;

/**
 * 类描述：本地文件系统的树工具类
 *
 * @author ZhuYin
 * @since 2025年01月09日
 */
public class LocalFsTreeUtil {

    private LocalFsTreeUtil() {
        // 禁止实例化
    }

    public static int countFiles(DtreeNode node) {
        if (node == null) {
            return 0;
        }
        if (node.children == null || node.children.isEmpty()) {
            return node.getDirFlag() == 0 ? 1 : 0;
        }
        // 判断当前节点是否为文件
        int fileCount = node.getDirFlag() == 0 ? 1 : 0;
        for (DtreeNode child : node.children) {
            // 递归计算每个子节点及其后代节点的文件数量
            fileCount += countFiles(child);
        }
        return fileCount;
    }

    public static void updateFileCount(List<DtreeNode> roots) {
        if (roots == null || roots.isEmpty()) {
            return;
        }
        for (DtreeNode root : roots) {
            updateNodeFileCount(root);
        }
    }

    private static void updateNodeFileCount(DtreeNode node) {
        if (node == null) {
            return;
        }
        // 对于每一个节点，计算其所有文件的总数
        int totalFiles = countFiles(node);
        // 假设有一个setter方法设置这个值到节点中
        node.setFileCount(totalFiles);
        // 递归更新子节点
        if (node.children != null && !node.children.isEmpty()) {
            for (DtreeNode child : node.children) {
                updateNodeFileCount(child);
            }
        }
    }
}